/*
Rilego - An easy Images 2 E-Book converter.
Copyright (C) 2011  Federico Improta (Kirys)

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */
package it.kirys.rilego.engine.processors.imagefilters;

import com.jhlabs.image.ContrastFilter;
import java.awt.image.BufferedImage;

/**
 *
 ** @author Federico Improta
 */
public class BrightessContrastFilter implements IImageFilter {

	public final static int MIN_CONTRAST = 0;
	public final static int MAX_CONTRAST = 10;
	public final static int MIN_BRIGHTNESS = -10;
	public final static int MAX_BRIGHTNESS = 10;
	int contrast;
	int brightness;

	public int getBrightness() {
		return brightness;
	}

	public void setBrightness(int brightness) {
		if (brightness >= MIN_BRIGHTNESS && brightness <= MAX_BRIGHTNESS) {
			this.brightness = brightness;
		}
	}

	public int getContrast() {
		return contrast;
	}

	public void setContrast(int contrast) {
		if (brightness >= MIN_CONTRAST && brightness <= MAX_CONTRAST) {
			this.contrast = contrast;
		}
	}

	@Override
	public BufferedImage filter(BufferedImage source) {
		float contrastf = 1.0f + contrast * 0.01f;
		float brightnessf = 1.0f + brightness * 0.02f;
		BufferedImage out = null;
		ContrastFilter cf = new ContrastFilter();
		out = cf.createCompatibleDestImage(source, null);
		cf.setContrast(contrastf);
		cf.setBrightness(brightnessf);
		cf.filter(source, out);
		return out;
	}

	@Override
	public IImageFilter clone() {
		return new BrightessContrastFilter(this);
	}

	public BrightessContrastFilter(BrightessContrastFilter source) {
		this.brightness = source.brightness;
		this.contrast = source.contrast;
	}

	public BrightessContrastFilter() {
		brightness = 0;
		contrast = 0;
	}
}
